package hyy_2022;

import commons.TreeNode;

/**
 * 判断平衡二叉树
 *
 * 二叉树的每个节点的左右子树高度差的绝对值不超过1
 *

 */
public class _0724_110_BalancedTree {

    /**
     * 判断是否为平衡二叉树
     * 1、左子树是平衡二叉树
     * 2、右子树是平衡二叉树
     * 3、左右子树的高度差的绝对值不超过1
     * @param root
     * @return true/false
     */
    public boolean isBalance(TreeNode root) {
        if(root == null) {
            return  true;
        } else {
            return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalance(root.left) && isBalance(root.right);
        }
    }



    /**
     * 计算二叉树中任意一个节点高度
     * @param root 任一节点
     * @return 返回任一节点的高度
     */
    public static int height(TreeNode root) {
        if(root == null) {
            return 0;
        } else {
            return Math.max(height(root.left),height(root.right)) + 1;
        }
    }



}
